#include <stdlib.h>

#ifndef __CALLBACK_MEM_H
#define __CALLBACK_MEM_H

#include "icmp.h"

typedef enum {CALLBACK_MEM_OK, CALLBACK_MEM_ERR, CALLBACK_MEM_FULL} CALLBACK_MEM_ERRCODE;
  
typedef struct __callbackMem *CALLBACK_MEM;

/**
* @brief Creacion de la EdD para el almacenamiento de funciones de callback.
*
* @return CALLBACK_MEM si correcto, NULL si error.
*/
CALLBACK_MEM createCallbackMem();

/**
* @brief Liberacion de la EdD para el almacenamiento de funciones de callback.
*
* @param callMeme EdD a liberar.
*/
void freeCallbackMem(CALLBACK_MEM callMem);

/**
* @brief Registra la funcion de callback function con id id en callMem.
*
* @param callMem EdD sobre la que ejecutar el registro.
* @param id Id con el que ejecutar el registro
* @param function Funcion a registrar.
* @return 0 si correcto, -1 si error.
*/
CALLBACK_MEM_ERRCODE registerCallback(CALLBACK_MEM callMem, unsigned int id, pf_notificacion_echo function);

/**
* @brief Extrae la funcion de callback asociada al id parametro.
*
* @param callMem EdD sobre la que ejecutar la extraccion.
* @param id Identificador a buscar
* @return Funcion de callback si correcto, NULL si no se ha encontrado
* registro asociado.
*/
pf_notificacion_echo getCallback(CALLBACK_MEM callMem, unsigned int id);

#endif
